import Vue from 'vue'
import Vuex from 'vuex'
import {
	wxAuthApi
} from "@/api/apis/comm.js"

Vue.use(Vuex)

let lifeData = {};

try {
	// 尝试获取本地是否存在lifeData变量，第一次启动APP时是不存在的
	lifeData = uni.getStorageSync('lifeData');
} catch (e) {

}

// 需要永久存储，且下次APP启动需要取出的，在state中的变量名
let saveStateKeys = ['user_info', 'user_token', 'isAuth', 'pop', 'isMobile', 'mobilePop'];

// 保存变量到本地存储中
const saveLifeData = function(key, value) {
	// 判断变量名是否在需要存储的数组中
	if (saveStateKeys.indexOf(key) != -1) {
		// 获取本地存储的lifeData对象，将变量添加到对象中
		let tmp = uni.getStorageSync('lifeData');
		// 第一次打开APP，不存在lifeData变量，故放一个{}空对象
		tmp = tmp ? tmp : {};
		tmp[key] = value;
		// 执行这一步后，所有需要存储的变量，都挂载在本地的lifeData对象中
		uni.setStorageSync('lifeData', tmp);
	}
}
const store = new Vuex.Store({
	// 下面这些值仅为示例，使用过程中请删除
	state: {
		// 如果上面从本地获取的lifeData对象下有对应的属性，就赋值给state中对应的变量
		// 加上vuex_前缀，是防止变量名冲突，也让人一目了然
		user_info: lifeData.user_info ? lifeData.user_info : {},
		user_token: lifeData.user_token ? lifeData.user_token : '',
		// 如果vuex_version无需保存到本地永久存储，无需lifeData.vuex_version方式
		vuex_version: '1.0.1',

		isAuth: lifeData.isAuth ? lifeData.isAuth : '',
		isMobile: lifeData.isMobile ? lifeData.isMobile : '',

		pop: false, //登录弹出框
		mobilePop: false, //获取手机号弹出框
		currentLocation: null,
		tipPop: false, //
	},
	mutations: {
		$uStore(state, payload) {
			// 判断是否多层级调用，state中为对象存在的情况，诸如user.info.score = 1
			let nameArr = payload.name.split('.');
			let saveKey = '';
			let len = nameArr.length;
			if (nameArr.length >= 2) {
				let obj = state[nameArr[0]];
				for (let i = 1; i < len - 1; i++) {
					obj = obj[nameArr[i]];
				}
				obj[nameArr[len - 1]] = payload.value;
				saveKey = nameArr[0];
			} else {
				// 单层级变量，在state就是一个普通变量的情况
				state[payload.name] = payload.value;
				saveKey = payload.name;
			}
			// 保存变量到本地，见顶部函数定义
			saveLifeData(saveKey, state[saveKey])
		}
	},
	actions: {
		// if (!this.isAuth) {
		//登录
		async login({
			state,
			commit,
			dispatch,
		}, ids) {
			console.log(ids)
			//h5写死
			// #ifdef H5
			let res = {
				data: {
					"id": 115,
					"id_number": "20231127223515217",
					"wx_number": null,
					"unionid": "oUK4F6TAe1EtzXHiDNm5R209TP2I",
					"openid": "o1gxF48c4wxOyIdYICKdY4gO4VzE",
					"avatar": "",
					"name": "555",
					"nickname": "666",
					"phone": 13980968324,
					"gender": 2,
					"balance": "0.00",
					"f_balance": null,
					"vip_expire_time": null,
					"is_vip": 1,
					"distributor_id": 0,
					"birthday": null,
					"notes": null,
					"discount": null,
					"stores_id": 0,
					"createtime": "2023-11-27 22:35:15",
					"updatetime": "2023-11-27 22:35:37",
					"token": "bc066038-d97e-4e72-ab5c-ca15c75c63d7"
				}
			}

			state.isAuth = true;
			state.user_token = '91045210-dc5e-4979-8217-0e4805b53b93';
			state.user_info = res.data
			state.isMobile = res.data.phone && res.data.phone !=
				undefined ? true : false;
			uni.setStorageSync('lifeData', {
				'isAuth': true,
				'user_token': res.data.token,
				'user_info': res.data,
				'isMobile': res.data.phone && res.data.phone !=
					undefined ? true : false
			}, 2592000);
			
			// #endif

			// #ifdef MP
			uni.login({
				provider: 'weixin',
				success(a) {
					if (a.errMsg == 'login:ok') {
						// wxCode = a.code;
						wxAuthApi({
							code: a.code,
							uid: ids.puid,
							did: ids.did,
							share_type: ids.share_type,
							sid: ids.sid,
						}).then(res => {
							if (res.code == 1) {
								console.log(res, '+++登录成功')
								state.isAuth = true;
								state.user_token = res.data.token;
								state.user_info = res.data;
								state.isMobile = res.data.phone && res.data.phone !=
									undefined ? true : false;
								uni.setStorageSync('lifeData', {
									'isAuth': true,
									'user_token': res.data.token,
									'user_info': res.data,
									'isMobile': res.data.phone && res.data.phone !=
										undefined ? true : false
								}, 2592000);
								// let ddlifeData = uni.getStorageSync('lifeData');
							}
						})
					}
				}
			});
			// #endif

		},
	}

})

export default store